home *** CD-ROM | disk | FTP | other *** search
/ PC-X 1997 October / pcx14_9710.iso / swag / files.swg / 0081_Find Object Unit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-11-22  |  3.9 KB  |  212 lines

  1.  
  2. Unit WGFFind; {File Find Object Unit}
  3. {$I WGDEFINE.INC}  { see below for WGDEFINE !! }
  4.  
  5. Interface
  6.  
  7. Uses
  8. {$IFDEF WINDOWS}
  9.    WinDos;
  10. {$ELSE}
  11.    Dos;
  12. {$ENDIF}
  13.  
  14. Const
  15. {searchtypes}
  16.    stReadOnly=$01;
  17.    stHidden=$02;
  18.    stSysFile=$04;
  19.    stVolumeID=$08;
  20.    stDirectory=$10;
  21.    stArchive=$20;
  22.    stAnyFile=$3F;
  23.  
  24. Type
  25. {$IFDEF WINDOWS}
  26.    PathStr=String[128];
  27.    DirStr=String[128];
  28.    NameStr=String[13];
  29.    ExtStr=String[4];
  30. {$ENDIF}
  31.  
  32.    FindRec=Record
  33. {$IFDEF WINDOWS}
  34.       SR:TSearchRec;
  35.       TStr:Array[0..180] of Char;
  36. {$ELSE}
  37.       SR:SearchRec;
  38. {$ENDIF}
  39.       Dir:DirStr;
  40.       Name:NameStr;
  41.       Ext:ExtStr;
  42.       DError:Word;
  43.       SearchType:Word;
  44.    End;
  45.  
  46.    FindObj = Object
  47.       FI: ^FindRec;
  48.       Constructor Init(ST:Word);    {SearchType: Sysfile, AnyFile, Archive}
  49.       Destructor Done;
  50.       Procedure FFirst(FN:String);
  51.       Procedure FNext;
  52.       Function  Found:Boolean;
  53.       Function  GetName:String;
  54.       Function  GetFullPath:String;
  55.       Function  GetDate:LongInt;
  56.       Function  GetSize:LongInt;
  57.       Function  GetAttr:Word;
  58.    End;
  59.  
  60. Implementation
  61.  
  62. {$IFDEF WINDOWS}
  63. Function FExpand(Str:String):String;
  64. Var
  65.    IStr:Array[0..128] of Char;
  66.    OStr:Array[0..128] of Char;
  67.  
  68. Begin
  69.    StrPCopy(IStr,Str);
  70.    FileExpand(OStr,IStr);
  71.    FExpand:=StrPas(OStr);
  72. End;
  73. {$ENDIF}
  74.  
  75. {$IFDEF WINDOWS}
  76. Procedure FSplit(Path:String;Var Dir:String;Var Name:String;Var Ext:String);
  77. Var
  78.    FPath:Array[0..129] of Char;
  79.    TD:Array[0..129] of Char;
  80.    TN:Array[0..14] of Char;
  81.    TE:Array[0..5] of Char;
  82.  
  83. Begin
  84.    StrPCopy(FPath,Path);
  85.    FileSplit(FPath,TD,TN,TE);
  86.    Dir:=StrPas(TD);
  87.    Name:=StrPas(TN);
  88.    Ext:=StrPas(TE);
  89. End;
  90. {$ENDIF}
  91.  
  92. Constructor FindObj.Init;
  93. Begin
  94.    New(FI);
  95.    If FI=Nil then Fail;
  96.    FI^.DError:=1;
  97.    FI^.SearchType:=StArchive+StReadOnly; {default}
  98. End;
  99.  
  100. Destructor FindObj.Done;
  101. Begin
  102.    If FI<>Nil then Dispose(FI);
  103. End;
  104.  
  105. Procedure FindObj.FFirst(FN:String);
  106. Begin
  107.    If FI<>Nil then Begin
  108.       FN:=FExpand(FN);
  109.       FSplit(FN,FI^.Dir,FI^.Name,FI^.Ext);
  110. {$IFDEF WINDOWS}
  111.       StrPCopy(FI^.TStr, FN);
  112.       FindFirst(FI^.TStr,FI^.SearchType,FI^.SR);
  113. {$ELSE}
  114.       FindFirst(FN,FI^.SearchType,FI^.SR);
  115. {$ENDIF}
  116.       FI^.DError:=DosError;
  117.    End
  118.    Else FI^.DError:=1;
  119. End;
  120.  
  121. Function  FindObj.GetName:String;
  122. Begin
  123.    GetName:='';
  124.    If FI<>Nil then
  125.       If Found Then
  126. {$IFDEF WINDOWS}
  127.          GetName:=StrPas(FI^.SR.Name);
  128. {$ELSE}
  129.        GetName:=FI^.SR.Name;
  130. {$ENDIF}
  131. End;
  132.  
  133. Function FindObj.GetFullPath:String;
  134. Begin
  135.    If FI<>Nil then GetFullPath:=FI^.Dir+GetName
  136.    Else GetFullPath:='';
  137. End;
  138.  
  139. Function FindObj.GetSize:LongInt;
  140. Begin
  141.    GetSize:=0;
  142.    If FI<>Nil then
  143.       If Found Then GetSize:=FI^.SR.Size;
  144. End;
  145.  
  146. Function  FindObj.GetDate: LongInt;
  147. Begin
  148.    GetDate:=0;
  149.    If FI<>Nil then
  150.       If Found Then GetDate:=FI^.SR.Time;
  151. End;
  152.  
  153. Function  FindObj.GetAttr:Word;
  154. Begin
  155.    GetAttr:=0;
  156.    If FI<>Nil then
  157.       If Found Then GetAttr:=FI^.SR.Attr;
  158. End;
  159.  
  160. Procedure FindObj.FNext;
  161. Begin
  162.    If FI<>Nil then Begin
  163.       FindNext(FI^.SR);
  164.       FI^.DError:=DosError;
  165.    End
  166.    Else FI^.DError:=1;
  167. End;
  168.  
  169. Function FindObj.Found:Boolean;
  170. Begin
  171.    Found:=(FI^.DError=0);
  172. End;
  173.  
  174. End.
  175.  
  176. [WGDEFINE.INC]
  177. {$I-}
  178. {$V-}
  179. {$S+}
  180. {$F+}
  181. {$D-}
  182. {$L-}
  183. {$R-}
  184. {$X+}
  185.  
  186. {$IFNDEF WINDOWS}
  187. {$O+}                       {Make units overlayable}
  188. {$IFNDEF OS2}
  189. {$X-}                       {Turn off extended syntax}
  190. {$ENDIF}
  191. {$ENDIF}
  192.  
  193. {$IFDEF WINDOWS}
  194.   {$DEFINE BASMINT}         {Use BASM for interrupts under windows}
  195. {$ENDIF}
  196.  
  197. {.$.DEFINE OPRO}
  198. {.$.DEFINE DEBUG}
  199. {BBS Definitions below (some that I have tested the new WGMSG*.PAS w/!)}
  200. {$IFDEF MAXIMUS}
  201.    {$DEFINE SQUISH}
  202. {$ENDIF}
  203. {$IFDEF RA2}
  204.    {$DEFINE JAM}
  205.    {$DEFINE HUDSON}
  206. {$ENDIF}
  207. {$IFDEF XENOPHOBE}
  208.    {$DEFINE FIDO}
  209.    {$DEFINE SQUISH}
  210.    {$DEFINE JAM}
  211. {$ENDIF}
  212.